home *** CD-ROM | disk | FTP | other *** search
/ Enter 2006 September / Enter 09 2006.iso / Internet / SpamExperts Home 1.1 / SpamExperts Home.exe / lib / spamexperts.modules / se_config.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-07-14  |  18.1 KB  |  514 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''
  5. The spamexpertsConfig object stores and retrieves the SpamExperts
  6. configuration options to and from the Windows registry.
  7.  
  8. The SpamexpertsConfig class uses properties for easy of use.
  9. example of use:
  10. from se_config import spamexpertsConfig
  11. block_spam = spamexpertsConfig.block_spam   # retrieves the block_spam value
  12.                                             # from the registry
  13.                                             
  14. spamexpertsConfig.enable_p2p = True         # sets enable_p2p to true and stores
  15.                                             # the value in the registry
  16. '''
  17. import os
  18. import sys
  19. import types
  20. import locale
  21. import random
  22. import _winreg
  23. import win32api
  24. import pythoncom
  25. import pywintypes
  26. from win32com.shell import shell, shellcon
  27. from Crypto.Cipher import AES
  28. from spamexperts.Options import options, optionsPathname
  29. LSP_NAME = 'SpamExpertsLSP'
  30. LSP_INI_FILE_NAME = '%s.ini' % (LSP_NAME,)
  31. SYSTEMDIR = win32api.GetSystemDirectory()
  32. LSP_INI_FULLPATH = os.path.join(SYSTEMDIR, LSP_INI_FILE_NAME)
  33.  
  34. def create_shortcut(shortcut_path, app_path):
  35.     shortcut = pythoncom.CoCreateInstance(shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink)
  36.     shortcut.SetWorkingDirectory(SYSTEMDIR)
  37.     shortcut.SetPath(app_path)
  38.     shortcut.QueryInterface(pythoncom.IID_IPersistFile).Save(shortcut_path, 0)
  39.  
  40.  
  41. class SpamexpertsConfig(object):
  42.     
  43.     def __init__(self):
  44.         self._SpamexpertsConfig__block_spam = True
  45.         self._SpamexpertsConfig__modify_subject = True
  46.         self._SpamexpertsConfig__modify_subject_tag = 'spam'
  47.         
  48.         try:
  49.             self._SpamexpertsConfig__lang = locale.getdefaultlocale()[0][:2]
  50.         except:
  51.             print >>sys.stderr, 'Failed to get language from system.'
  52.             self._SpamexpertsConfig__lang = 'en'
  53.  
  54.         self._SpamexpertsConfig__date_header = 'Delivery-Date'
  55.         self._SpamexpertsConfig__user_address = ''
  56.         self._SpamexpertsConfig__auto_bugreport = False
  57.         self._SpamexpertsConfig__enable_lsp = False
  58.         self._SpamexpertsConfig__automatically_update = True
  59.         self._SpamexpertsConfig__eudora_compatibility = False
  60.         self._SpamexpertsConfig__sort_spam = (2, False)
  61.         self._SpamexpertsConfig__sort_ham = (2, False)
  62.         self._SpamexpertsConfig__sort_unsure = (2, False)
  63.         self._SpamexpertsConfig__notify_sound = ''
  64.         self._SpamexpertsConfig__user_id = None
  65.         self._SpamexpertsConfig__split_vertically = False
  66.         self._SpamexpertsConfig__period = 5
  67.         self._SpamexpertsConfig__enable_periodic = False
  68.         self._SpamexpertsConfig__balloon_notifications = True
  69.         self._SpamexpertsConfig__show_welcome = True
  70.         self.msginfoDB = None
  71.  
  72.     
  73.     def get_mailapps(self):
  74.         pass
  75.  
  76.     
  77.     def set_mailapps(self, apps):
  78.         if SYSTEMDIR == '':
  79.             return 0
  80.         else:
  81.             options = options
  82.             import spamexperts.Options
  83.             content = []
  84.             for path, ports, description in apps:
  85.                 for port in ports.split(','):
  86.                     content.append('%s,%s,%s,%s' % (path, port, options[('globals', 'proxy_redirection_port')], description))
  87.                 
  88.             
  89.             
  90.             try:
  91.                 inifile = open(LSP_INI_FULLPATH, 'wb')
  92.             except IOError:
  93.                 e = None
  94.                 print >>sys.stderr, 'Could not update LSP ini:', str(e)
  95.  
  96.             inifile.write('\n'.join(content))
  97.             inifile.close()
  98.             return len(apps)
  99.  
  100.     mailapps = property(get_mailapps, set_mailapps)
  101.     key = 'QJATbEck0DSKP3xF1ZyAAzwGy7X9P0qk'
  102.     crypt = AES.new(key)
  103.     
  104.     def encrypt(self, s):
  105.         s = s + '.' * (16 - len(s) % 16)
  106.         return repr(self.crypt.encrypt(s))
  107.  
  108.     
  109.     def decrypt(self, s):
  110.         if s is None:
  111.             return s
  112.         
  113.         return self.crypt.decrypt(eval(s, { }, { })).rstrip('.')
  114.  
  115.     
  116.     def get_periodic(self):
  117.         key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, self._SpamexpertsConfig__subkey + '\\periodic')
  118.         results = []
  119.         i = 0
  120.         while True:
  121.             
  122.             try:
  123.                 (value, password) = _winreg.EnumValue(key, i)[:2]
  124.             except WindowsError:
  125.                 break
  126.  
  127.             (server, port, username, proto, use_ssl) = self.decrypt(value).split(',', 5)
  128.             port = int(port)
  129.             use_ssl = eval(use_ssl, { }, { })
  130.             password = self.decrypt(password)
  131.             results.append((server, port, username, password, proto, use_ssl))
  132.             i += 1
  133.         return results
  134.  
  135.     
  136.     def set_periodic(self, data):
  137.         key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, self._SpamexpertsConfig__subkey + '\\periodic')
  138.         while True:
  139.             
  140.             try:
  141.                 subkey = _winreg.EnumValue(key, 0)[0]
  142.             except WindowsError:
  143.                 break
  144.  
  145.             _winreg.DeleteValue(key, subkey)
  146.         for server, port, username, password, proto, use_ssl in data:
  147.             subkey = self.encrypt('%s,%s,%s,%s,%s' % (server, port, username, proto, use_ssl))
  148.             _winreg.SetValueEx(key, subkey, 0, _winreg.REG_SZ, self.encrypt(password))
  149.         
  150.  
  151.     periodic = property(get_periodic, set_periodic)
  152.     
  153.     def get_not_periodic(self):
  154.         key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, self._SpamexpertsConfig__subkey + '\\not_periodic')
  155.         results = []
  156.         i = 0
  157.         while True:
  158.             
  159.             try:
  160.                 value = _winreg.EnumValue(key, i)[0]
  161.             except WindowsError:
  162.                 break
  163.  
  164.             (server, port, username, proto, use_ssl) = self.decrypt(value).split(',', 5)
  165.             port = int(port)
  166.             use_ssl = eval(use_ssl, { }, { })
  167.             results.append((server, port, username, proto, use_ssl))
  168.             i += 1
  169.         return results
  170.  
  171.     
  172.     def set_not_periodic(self, data):
  173.         key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, self._SpamexpertsConfig__subkey + '\\not_periodic')
  174.         while True:
  175.             
  176.             try:
  177.                 subkey = _winreg.EnumValue(key, 0)[0]
  178.             except WindowsError:
  179.                 break
  180.  
  181.             _winreg.DeleteValue(key, subkey)
  182.         for server, port, username, proto, use_ssl in data:
  183.             subkey = self.encrypt('%s,%s,%s,%s,%s' % (server, port, username, proto, use_ssl))
  184.             _winreg.SetValueEx(key, subkey, 0, _winreg.REG_SZ, 'True')
  185.         
  186.  
  187.     not_periodic = property(get_not_periodic, set_not_periodic)
  188.     __subkey = 'Software\\SpamExperts'
  189.     
  190.     def _registry_get(cls, name, default):
  191.         key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, cls._SpamexpertsConfig__subkey)
  192.         
  193.         try:
  194.             return _winreg.QueryValueEx(key, name)[0]
  195.         except WindowsError:
  196.             return default
  197.  
  198.  
  199.     _registry_get = classmethod(_registry_get)
  200.     
  201.     def _registry_get_bool(cls, name, default):
  202.         plain = cls._registry_get(name, default)
  203.         if isinstance(plain, types.BooleanType):
  204.             return plain
  205.         
  206.         return plain.lower() == 'true'
  207.  
  208.     _registry_get_bool = classmethod(_registry_get_bool)
  209.     
  210.     def _registry_set(cls, name, value):
  211.         value = str(value)
  212.         key = _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, cls._SpamexpertsConfig__subkey)
  213.         _winreg.SetValueEx(key, name, 0, _winreg.REG_SZ, value)
  214.  
  215.     _registry_set = classmethod(_registry_set)
  216.     
  217.     def get_block_spam(self):
  218.         self._SpamexpertsConfig__block_spam = self._registry_get_bool('block_spam', self._SpamexpertsConfig__block_spam)
  219.         return self._SpamexpertsConfig__block_spam
  220.  
  221.     
  222.     def set_block_spam(self, value):
  223.         self._registry_set('block_spam', value)
  224.         self._SpamexpertsConfig__block_spam = value
  225.  
  226.     block_spam = property(get_block_spam, set_block_spam)
  227.     
  228.     def get_period(self):
  229.         self._SpamexpertsConfig__period = int(self._registry_get('period', self._SpamexpertsConfig__period))
  230.         return self._SpamexpertsConfig__period
  231.  
  232.     
  233.     def set_period(self, value):
  234.         self._registry_set('period', value)
  235.         self._SpamexpertsConfig__period = value
  236.  
  237.     period = property(get_period, set_period)
  238.     
  239.     def get_balloon_notifications(self):
  240.         self._SpamexpertsConfig__balloon_notifications = self._registry_get_bool('enable_balloon_notifications', self._SpamexpertsConfig__balloon_notifications)
  241.         return self._SpamexpertsConfig__balloon_notifications
  242.  
  243.     
  244.     def set_balloon_notifications(self, value):
  245.         self._registry_set('enable_balloon_notifications', value)
  246.         self._SpamexpertsConfig__balloon_notifications = value
  247.  
  248.     enable_balloon_notifications = property(get_balloon_notifications, set_balloon_notifications)
  249.     
  250.     def get_show_welcome(self):
  251.         self._SpamexpertsConfig__show_welcome = self._registry_get_bool('show_welcome', self._SpamexpertsConfig__show_welcome)
  252.         return self._SpamexpertsConfig__show_welcome
  253.  
  254.     
  255.     def set_show_welcome(self, value):
  256.         self._registry_set('show_welcome', value)
  257.         self._SpamexpertsConfig__show_welcome = value
  258.  
  259.     show_welcome = property(get_show_welcome, set_show_welcome)
  260.     
  261.     def get_enable_periodic(self):
  262.         self._SpamexpertsConfig__enable_periodic = self._registry_get_bool('enable_periodic', self._SpamexpertsConfig__enable_periodic)
  263.         return self._SpamexpertsConfig__enable_periodic
  264.  
  265.     
  266.     def set_enable_periodic(self, value):
  267.         self._registry_set('enable_periodic', value)
  268.         self._SpamexpertsConfig__enable_periodic = value
  269.  
  270.     enable_periodic = property(get_enable_periodic, set_enable_periodic)
  271.     
  272.     def get_eudora(self):
  273.         self._SpamexpertsConfig__eudora_compatibility = self._registry_get_bool('eudora', self._SpamexpertsConfig__eudora_compatibility)
  274.         return self._SpamexpertsConfig__eudora_compatibility
  275.  
  276.     
  277.     def set_eudora(self, value):
  278.         self._registry_set('eudora', value)
  279.         self._SpamexpertsConfig__eudora_compatibility = value
  280.  
  281.     eudora_compatibility = property(get_eudora, set_eudora)
  282.     
  283.     def get_split_vertically(self):
  284.         self._SpamexpertsConfig__split_vertically = self._registry_get_bool('split_vertically', self._SpamexpertsConfig__split_vertically)
  285.         return self._SpamexpertsConfig__split_vertically
  286.  
  287.     
  288.     def set_split_vertically(self, value):
  289.         self._registry_set('split_vertically', value)
  290.         self._SpamexpertsConfig__split_vertically = value
  291.  
  292.     split_vertically = property(get_split_vertically, set_split_vertically)
  293.     
  294.     def get_launch_on_startup(self):
  295.         startup = shell.SHGetFolderPath(0, shellcon.CSIDL_STARTUP, 0, 0)
  296.         
  297.         try:
  298.             common = shell.SHGetFolderPath(0, shellcon.CSIDL_COMMON_STARTUP, 0, 0)
  299.         except pywintypes.com_error:
  300.             common = None
  301.  
  302.         if os.path.exists(os.path.join(startup, 'SpamExperts.lnk')):
  303.             return True
  304.         elif common and os.path.exists(os.path.join(common, 'SpamExperts.lnk')):
  305.             return True
  306.         
  307.         return False
  308.  
  309.     
  310.     def set_launch_on_startup(self, value):
  311.         if value == self.launch_on_startup:
  312.             return None
  313.         
  314.         startup = shell.SHGetFolderPath(0, shellcon.CSIDL_STARTUP, 0, 0)
  315.         common = shell.SHGetFolderPath(0, shellcon.CSIDL_COMMON_STARTUP, 0, 0)
  316.         if value:
  317.             if hasattr(sys, 'frozen'):
  318.                 create_shortcut(os.path.join(startup, 'SpamExperts.lnk'), sys.executable)
  319.             
  320.         else:
  321.             
  322.             try:
  323.                 os.remove(os.path.join(startup, 'SpamExperts.lnk'))
  324.             except OSError:
  325.                 pass
  326.  
  327.             
  328.             try:
  329.                 os.remove(os.path.join(common, 'SpamExperts.lnk'))
  330.             except OSError:
  331.                 pass
  332.  
  333.  
  334.     launch_on_startup = property(get_launch_on_startup, set_launch_on_startup)
  335.     
  336.     def get_user_id(self):
  337.         self._SpamexpertsConfig__user_id = self._registry_get('user_id', None)
  338.         if self._SpamexpertsConfig__user_id is None:
  339.             self.set_user_id(str(random.random())[2:])
  340.             self._SpamexpertsConfig__user_id = self._registry_get('user_id', None)
  341.         
  342.         return self._SpamexpertsConfig__user_id
  343.  
  344.     
  345.     def set_user_id(self, value):
  346.         self._registry_set('user_id', value)
  347.         self._SpamexpertsConfig__user_id = value
  348.  
  349.     user_id = property(get_user_id, set_user_id)
  350.     
  351.     def get_user_address(self):
  352.         self._SpamexpertsConfig__user_address = self._registry_get('user_address', self._SpamexpertsConfig__user_address)
  353.         return self._SpamexpertsConfig__user_address
  354.  
  355.     
  356.     def set_user_address(self, value):
  357.         self._registry_set('user_address', value)
  358.         self._SpamexpertsConfig__user_address = value
  359.  
  360.     user_address = property(get_user_address, set_user_address)
  361.     
  362.     def get_auto_report(self):
  363.         data_dir = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0)
  364.         fn = os.path.join(data_dir, 'auto_report')
  365.         return os.path.exists(fn)
  366.  
  367.     
  368.     def set_auto_report(self, value):
  369.         data_dir = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0)
  370.         fn = os.path.join(data_dir, 'auto_report')
  371.         if value:
  372.             file(fn, 'w').close()
  373.         else:
  374.             
  375.             try:
  376.                 os.remove(fn)
  377.             except OSError:
  378.                 pass
  379.  
  380.  
  381.     auto_bugreport = property(get_auto_report, set_auto_report)
  382.     
  383.     def get_sort_spam(self):
  384.         col = int(self._registry_get('sort_spam_col', self._SpamexpertsConfig__sort_spam[0]))
  385.         col_dir = self._registry_get_bool('sort_spam_col_dir', self._SpamexpertsConfig__sort_spam[1])
  386.         self._SpamexpertsConfig__sort_spam = (col, col_dir)
  387.         return self._SpamexpertsConfig__sort_spam
  388.  
  389.     
  390.     def set_sort_spam(self, value):
  391.         (col, col_dir) = value
  392.         self._registry_set('sort_spam_col', col)
  393.         self._registry_set('sort_spam_col_dir', col_dir)
  394.         self._SpamexpertsConfig__sort_spam = (col, col_dir)
  395.  
  396.     sort_spam = property(get_sort_spam, set_sort_spam)
  397.     
  398.     def get_sort_ham(self):
  399.         col = int(self._registry_get('sort_ham_col', self._SpamexpertsConfig__sort_ham[0]))
  400.         col_dir = self._registry_get_bool('sort_ham_col_dir', self._SpamexpertsConfig__sort_ham[1])
  401.         self._SpamexpertsConfig__sort_ham = (col, col_dir)
  402.         return self._SpamexpertsConfig__sort_ham
  403.  
  404.     
  405.     def set_sort_ham(self, value):
  406.         (col, col_dir) = value
  407.         self._registry_set('sort_ham_col', col)
  408.         self._registry_set('sort_ham_col_dir', col_dir)
  409.         self._SpamexpertsConfig__sort_ham = (col, col_dir)
  410.  
  411.     sort_ham = property(get_sort_ham, set_sort_ham)
  412.     
  413.     def get_sort_unsure(self):
  414.         col = int(self._registry_get('sort_unsure_col', self._SpamexpertsConfig__sort_unsure[0]))
  415.         col_dir = self._registry_get_bool('sort_unsure_col_dir', self._SpamexpertsConfig__sort_unsure[1])
  416.         self._SpamexpertsConfig__sort_unsure = (col, col_dir)
  417.         return self._SpamexpertsConfig__sort_unsure
  418.  
  419.     
  420.     def set_sort_unsure(self, value):
  421.         (col, col_dir) = value
  422.         self._registry_set('sort_unsure_col', col)
  423.         self._registry_set('sort_unsure_col_dir', col_dir)
  424.         self._SpamexpertsConfig__sort_unsure = (col, col_dir)
  425.  
  426.     sort_unsure = property(get_sort_unsure, set_sort_unsure)
  427.     
  428.     def get_modify_subject(self):
  429.         return options[('Headers', 'header_spam_string')] in options[('Headers', 'notate_subject')]
  430.  
  431.     
  432.     def set_modify_subject(self, value):
  433.         existing = set(options[('Headers', 'notate_subject')])
  434.         if value:
  435.             existing.add(options[('Headers', 'header_spam_string')])
  436.         else:
  437.             
  438.             try:
  439.                 existing.remove(options[('Headers', 'header_spam_string')])
  440.             except KeyError:
  441.                 pass
  442.  
  443.         options[('Headers', 'notate_subject')] = tuple(existing)
  444.         options.update_file(optionsPathname)
  445.  
  446.     modify_subject = property(get_modify_subject, set_modify_subject)
  447.     
  448.     def get_modify_subject_tag(self):
  449.         return options[('Headers', 'header_spam_string')]
  450.  
  451.     
  452.     def set_modify_subject_tag(self, value):
  453.         options[('Headers', 'header_spam_string')] = value
  454.         options.update_file(optionsPathname)
  455.  
  456.     modify_subject_tag = property(get_modify_subject_tag, set_modify_subject_tag)
  457.     
  458.     def get_lang(self):
  459.         self._SpamexpertsConfig__lang = self._registry_get('lang', self._SpamexpertsConfig__lang)
  460.         return self._SpamexpertsConfig__lang
  461.  
  462.     
  463.     def set_lang(self, value):
  464.         self._registry_set('lang', value)
  465.         self._SpamexpertsConfig__lang = value
  466.  
  467.     lang = property(get_lang, set_lang)
  468.     
  469.     def get_date_header(self):
  470.         self._SpamexpertsConfig__date_header = self._registry_get('date_header', self._SpamexpertsConfig__date_header)
  471.         return self._SpamexpertsConfig__date_header
  472.  
  473.     
  474.     def set_date_header(self, value):
  475.         self._registry_set('date_header', value)
  476.         self._SpamexpertsConfig__date_header = value
  477.  
  478.     date_header = property(get_date_header, set_date_header)
  479.     
  480.     def get_enable_lsp(self):
  481.         self._SpamexpertsConfig__enable_lsp = self._registry_get_bool('enable_lsp', self._SpamexpertsConfig__enable_lsp)
  482.         return self._SpamexpertsConfig__enable_lsp
  483.  
  484.     
  485.     def set_enable_lsp(self, value):
  486.         self._registry_set('enable_lsp', value)
  487.         self._SpamexpertsConfig__enable_lsp = value
  488.  
  489.     enable_lsp = property(get_enable_lsp, set_enable_lsp)
  490.     
  491.     def get_notify_sound(self):
  492.         self._SpamexpertsConfig__notify_sound = self._registry_get('notify_sound', self._SpamexpertsConfig__notify_sound)
  493.         return self._SpamexpertsConfig__notify_sound
  494.  
  495.     
  496.     def set_notify_sound(self, value):
  497.         self._registry_set('notify_sound', value)
  498.         self._SpamexpertsConfig__notify_sound = value
  499.  
  500.     notify_sound = property(get_notify_sound, set_notify_sound)
  501.     
  502.     def get_automatically_update(self):
  503.         self._SpamexpertsConfig__automatically_update = self._registry_get_bool('automatically_update', self._SpamexpertsConfig__automatically_update)
  504.         return self._SpamexpertsConfig__automatically_update
  505.  
  506.     
  507.     def set_automatically_update(self, value):
  508.         self._registry_set('automatically_update', value)
  509.         self._SpamexpertsConfig__automatically_update = value
  510.  
  511.     automatically_update = property(get_automatically_update, set_automatically_update)
  512.  
  513. spamexpertsConfig = SpamexpertsConfig()
  514.